export function randomExtend(minNum, maxNum) {
  if (arguments.length === 1) {
    return parseInt(Math.random() * minNum + 1, 10)
  } else {
    return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10)
  }
}

/*
这是一个用于创建防抖函数的 JavaScript 代码段。防抖函数的作用是确保一定时间内只执行一次特定的操作，
通常用于处理频繁触发的事件，如输入框输入事件，滚动事件等，以减少性能开销。

让我们来详细解释代码的每一部分：

debounce 函数接受两个参数：

delay: 表示防抖的时间间隔，即多久之后执行一次操作。
callback: 要执行的操作，即在防抖时间间隔内只执行一次的函数。
let lastTime: 用于存储上一次触发操作的时间戳。

返回一个匿名函数，该函数使用闭包的方式保存了 lastTime 变量的状态。

在这个匿名函数内部，首先调用 clearTimeout(lastTime) 来清除之前设置的定时器，确保在新的操作触发时，旧的定时器被清除。

创建一个包含当前函数的执行上下文和参数的数组 [that, args]。

使用 setTimeout 设置一个新的定时器，该定时器将在指定的 delay 时间后执行回调函数。

在回调函数中，使用 apply 方法将保存的执行上下文和参数传递给原始的回调函数 callback。

通过这样的实现，防抖函数确保在一段时间内只有最后一次触发的操作被执行，从而避免频繁触发造成的不必要的开销。

*/
export function debounce(delay, callback) {
  let lastTime

  return function() {
    clearTimeout(lastTime)
    const [that, args] = [this, arguments]
    lastTime = setTimeout(() => {
      callback.apply(that, args)
    }, delay)
  }
}

/*
这是一个使用 MutationObserver 监听DOM元素变化的 JavaScript 函数。
具体来说，它监视指定的DOM元素的样式属性的变化，当这些变化发生时，会触发指定的回调函数。

让我们来详细解释代码的每一部分：

const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver:
这一行代码用于获取适当的 MutationObserver 构造函数。
MutationObserver 是浏览器提供的用于监视 DOM 树变化的接口，但不同的浏览器可能使用不同的前缀或名称。

const observer = new MutationObserver(callback):
创建一个新的 MutationObserver 实例，传入回调函数 callback 作为参数。这个回调函数将在监视的DOM元素发生变化时被调用。

observer.observe(dom, { attributes: true, attributeFilter: ['style'], attributeOldValue: true }): 开始观察指定的 DOM 元素 (dom)，并定义了观察的配置选项。在这里，配置选项包括：

attributes: true：表示监视元素的属性变化。
attributeFilter: ['style']：指定只监视 style 属性的变化。
attributeOldValue: true：表示在回调函数中提供旧的属性值。
return observer: 将创建的 MutationObserver 实例返回，以便在以后需要的时候可以调用其方法，例如停止观察 (disconnect)。

总体而言，这个函数的目的是为了监视指定的 DOM 元素的样式属性变化，并在变化发生时调用指定的回调函数。
这对于需要在 DOM 元素尺寸或样式变化时执行某些操作的情况非常有用，例如实时调整布局或执行动画。
*/
export function observerDomResize(dom, callback) {
  const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver
  const observer = new MutationObserver(callback)
  observer.observe(dom, { attributes: true, attributeFilter: ['style'], attributeOldValue: true })
  return observer
}

export function getPointDistance(pointOne, pointTwo) {
  const minusX = Math.abs(pointOne[0] - pointTwo[0])
  const minusY = Math.abs(pointOne[1] - pointTwo[1])
  return Math.sqrt(minusX * minusX + minusY * minusY)
}
